<?php
/**
 * User: b179a9
 * Date: 9/28/11
 * Time: 7:53 PM
 */

namespace Managers;

class Search
{
    /**
     * Поисковый индекс для новостей..
     */
    const ARTICLES_INDEX = 'articles';

    /**
     * Поисовый индекс для тегов.
     */
    const TAGS_INDEX = 'tags';

    /**
     * Поисковый индекс для объяв.
     */
    const ITEMS_INDEX = 'newsitems';

    /**
     *Поле, что содержит дату публикации новости.
     * Используется для архива новостей.
     */
    const PUBLISH_FIELD = 'published';

    /**
     * Возвращает данные с архива новостей.
     * @param $year год
     * @param $month месяц
     * @return array
     */
    function getArchive($year, $month)
    {
        // "Опять даты, опять пхп." (с). Нужно получить юникс время для начала месяца и для конца месяца.
        $next_year = $year;
        $next_month = $month + 1;
        if ($next_month > 12) {
            $next_year++;
            $next_month = 1;
        }
        $start = mktime(0, 0, 0, $month, 1, $year);
        /**
         * Согласно мануалу, 0-вой день - последний день предыдущего месяца.
         */
        $end = mktime(0, 0, 0, $next_month, 0, $next_year);

        $sphinxManager = new \Managers\Utils\SphinxManager();
        $res = $sphinxManager->setRange(self::PUBLISH_FIELD, $start, $end)
                ->addQuery('', self::ARTICLES_INDEX)
                ->getResult();
        return $res;
    }

    /**
     * Ищет в статьях заданный текст.
     * @param $text
     * @return array
     */
    function getSearchNews($text, $start, $limit)
    {
        $sphinxManager = new \Managers\Utils\SphinxManager();
        $res = $sphinxManager->limit($start, $limit)
                ->addQuery($text, self::ARTICLES_INDEX)
                ->getResult();
        return $res;
    }


    function getSearchTags($text)
    {
        $sphinxManager = new \Managers\Utils\SphinxManager();
        $query = sprintf('*%s*', $text);
        $res = $sphinxManager->addQuery($query, self::TAGS_INDEX)
                ->getResult();
        return $res;
    }

    public function getSearchItems($text, $start, $limit)
    {
        $sphinxManager = new \Managers\Utils\SphinxManager();
        $res = $sphinxManager->limit($start, $limit)
                ->addQuery($text, self::ITEMS_INDEX)
                ->getResult();
        return $res;
    }

}
